Caching এর ধারণা এবং Spring JDBC তে এর প্রয়োজনীয়তা

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এ Caching |
74
74

Caching হলো একটি মেকানিজম যা ডেটা বা ফলাফলকে একটি দ্রুত এক্সেসযোগ্য স্টোরেজে সংরক্ষণ করে, যাতে একই ডেটার জন্য পরবর্তী অনুরোধগুলোতে ডাটাবেস বা কম্প্লেক্স প্রসেসিংয়ে যাওয়ার প্রয়োজন হয় না। এটি অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত হয়।

ক্যাশিং-এর মূল উদ্দেশ্য:

  1. দ্রুত ডেটা অ্যাক্সেস: একই ডেটা বারবার ডাটাবেস থেকে আনতে সময় লাগে। ক্যাশিং ডেটা দ্রুত সরবরাহ করে।
  2. লোড হ্রাস করা: ডাটাবেস বা সার্ভারে লোড কমায়।
  3. পারফরম্যান্স উন্নত করা: কম সময়ে ডেটা অ্যাক্সেস করে অ্যাপ্লিকেশনের গতি বৃদ্ধি করে।

ক্যাশিং কোথায় ব্যবহৃত হয়?

  • ডাটাবেস থেকে বারবার একই ডেটা পড়তে হলে।
  • কম্প্লেক্স গণনা বা প্রসেসিং এর ফলাফল সংরক্ষণ করতে।
  • API কল বা থার্ড-পার্টি সার্ভিস থেকে ডেটা রিট্রিভ করার সময়।

Spring JDBC-তে Caching এর প্রয়োজনীয়তা

স্প্রিং জেডিবিসি ব্যবহার করে অ্যাপ্লিকেশন যখন ডাটাবেসের সাথে কাজ করে, তখন ক্যাশিং এর ব্যবহার বেশ কয়েকটি সুবিধা প্রদান করে:

  1. বারবার ডাটাবেস কল কমানো:
    • একই ডেটা বারবার রিকোয়েস্ট করলে ক্যাশিং ডাটাবেসের লোড কমায়।
  2. রিড অপারেশনের পারফরম্যান্স বৃদ্ধি:
    • ফ্রিকোয়েন্টলি রিড হওয়া ডেটা ক্যাশে রেখে দ্রুত অ্যাক্সেস করা যায়।
  3. ব্যাচ প্রসেসিং ত্বরান্বিত করা:
    • ব্যাচ প্রসেসিংয়ের সময় রেফারেন্স ডেটা ক্যাশে রাখলে অপারেশনগুলো দ্রুত হয়।
  4. ডেটাবেস সার্ভার ব্যয় হ্রাস:
    • ক্যাশিং ব্যবহার করে ডাটাবেসের উপর চাপ কমানো যায়, যা সার্ভার ব্যয় হ্রাস করে।

Spring JDBC এবং Caching এর বাস্তবায়ন

Spring JDBC তে ক্যাশিং সরাসরি সমর্থন করে না। তবে, স্প্রিং-এর ক্যাশিং মডিউল এবং বিভিন্ন ক্যাশিং লাইব্রেরি (যেমন EhCache, Caffeine, Redis) ব্যবহার করে ক্যাশিং ইমপ্লিমেন্ট করা যায়।


উদাহরণ সহ Spring JDBC-তে ক্যাশিং বাস্তবায়ন

১. Spring Caching ব্যবহার করে ক্যাশিং ইমপ্লিমেন্ট করা

Dependency যোগ করা (Maven):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.1.3</version>
</dependency>
Configuration Class:
@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        return new CaffeineCacheManager("studentsCache");
    }
}
Service Layer:
@Service
public class StudentService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Cacheable("studentsCache")
    public Student getStudentById(int id) {
        System.out.println("Fetching from database...");
        String sql = "SELECT id, name, age FROM students WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> {
            Student student = new Student();
            student.setId(rs.getInt("id"));
            student.setName(rs.getString("name"));
            student.setAge(rs.getInt("age"));
            return student;
        });
    }
}
Controller বা Main Method:
public static void main(String[] args) {
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    StudentService studentService = context.getBean(StudentService.class);

    // প্রথমবার ডাটাবেস থেকে ডেটা রিট্রিভ হবে
    Student student1 = studentService.getStudentById(1);
    System.out.println(student1);

    // একই রেকর্ড দ্বিতীয়বার রিকোয়েস্ট করলে ক্যাশ থেকে ডেটা রিট্রিভ হবে
    Student student2 = studentService.getStudentById(1);
    System.out.println(student2);
}

আউটপুট:

Fetching from database...
Student{id=1, name='John Doe', age=20}
Student{id=1, name='John Doe', age=20}

২. Redis ব্যবহার করে ক্যাশিং ইমপ্লিমেন্ট করা

Dependency যোগ করা (Maven):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Configuration Class:
@Configuration
@EnableCaching
public class RedisCacheConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        return RedisCacheManager.builder(connectionFactory).build();
    }
}
Service Layer:
@Service
public class StudentService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Cacheable("studentsCache")
    public Student getStudentById(int id) {
        System.out.println("Fetching from database...");
        String sql = "SELECT id, name, age FROM students WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> {
            Student student = new Student();
            student.setId(rs.getInt("id"));
            student.setName(rs.getString("name"));
            student.setAge(rs.getInt("age"));
            return student;
        });
    }
}

Spring Caching Key Annotations

  1. @Cacheable:

    • ক্যাশ থেকে ডেটা রিটার্ন করে, যদি ক্যাশে পাওয়া যায়। অন্যথায় ডাটাবেস থেকে ডেটা নিয়ে ক্যাশে সংরক্ষণ করে।

    উদাহরণ:

    @Cacheable("cacheName")
    public Data fetchData(int id) { ... }
    
  2. @CachePut:

    • ডেটা ক্যাশে আপডেট করে।

    উদাহরণ:

    @CachePut("cacheName")
    public Data updateData(int id, Data newData) { ... }
    
  3. @CacheEvict:

    • ক্যাশ থেকে ডেটা মুছে ফেলে।

    উদাহরণ:

    @CacheEvict("cacheName")
    public void deleteData(int id) { ... }
    

Spring JDBC তে Caching এর সুবিধা

  1. ডাটাবেস লোড হ্রাস: ক্যাশ থেকে ডেটা পড়ার কারণে ডাটাবেসের উপর চাপ কমে।
  2. দ্রুত রেসপন্স: ক্যাশ থেকে ডেটা এক্সেস দ্রুত হয়।
  3. ব্যবস্থাপনা সহজ: Spring এর বিল্ট-ইন অ্যানোটেশন এবং টুল দিয়ে ক্যাশ সহজে ব্যবস্থাপনা করা যায়।
  4. স্কেলেবিলিটি: Redis বা EhCache ব্যবহার করে ক্যাশিং স্কেলেবল করা যায়।

উপসংহার

Spring JDBC-তে ক্যাশিং ব্যবহার করা অ্যাপ্লিকেশনের পারফরম্যান্স এবং স্কেলেবিলিটি বৃদ্ধির একটি কার্যকর পদ্ধতি। Spring এর বিল্ট-ইন ক্যাশিং মেকানিজম, যেমন @Cacheable, সহজভাবে ক্যাশিং ইমপ্লিমেন্ট করতে সহায়ক। Redis এবং EhCache এর মতো টুল ব্যবহার করে ক্যাশিং আরও শক্তিশালী করা যায়।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion